/******************************************************************************
 * Copyright 2019 NVIDIA Corporation. All rights reserved.
 *****************************************************************************/
/// \file
/// \brief Intersection-highlight specific pick results returned by the
///        NVIDIA IndeX library when querying a scene's contents using the pick operation.

#ifndef NVIDIA_INDEX_IINTERSECTION_HIGHLIGHT_PICK_RESULT_H
#define NVIDIA_INDEX_IINTERSECTION_HIGHLIGHT_PICK_RESULT_H

#include <mi/base/interface_declare.h>
#include <mi/dice.h>

#include <nv/index/iscene_query_results.h>

namespace nv
{
namespace index
{
/// @ingroup scene_queries

/// Interface class that returns the pick result specific to the intersection highlighting.
///
/// The interface class sub-classes from \c IScene_pick_result to provide additional
/// query results that are specific to highlighting of an intersection between a shape class,
/// such as triangle mesh or a heightfield, and a plane (\c IPlane).
///
/// \c IIntersection_highlight_pick_result represents a query result in addition to an
/// \c IPlane_pick_result when an intersection highlight was hit during a pick operation on a
/// plane. Instances of \c IIntersection_highlight_pick_result are always returned right before
/// the actual plane pick results. Multiple \c IIntersection_highlight_pick_result instances
/// are returned by pick operations intersecting multiple overlapping intersection highlights
/// on the same plane. The ordering of the \c IIntersection_highlight_pick_result instances is
/// top-most to bottom-most intersection highlight as defined by the order of the
/// \c IIntersection_highlighting attributes given through the scene description.
///
class IIntersection_highlight_pick_result
  : public mi::base::Interface_declare<0xec5d55c0, 0x3bb0, 0x41f6, 0x93, 0xd2, 0x2a, 0x4e, 0xa4,
      0x55, 0xb6, 0x6a, nv::index::IScene_pick_result>
{
public:
  /// Returns the reference to the shape used for intersection highlighting.
  ///
  /// The intersection highlights on a plane are caused by an intersection of
  /// a shape in the scene and the plane. The pick query provides the reference
  /// to the shape if a pick operation hits the intersection highlight.
  /// The reference represents an additional query result. The pick position,
  /// color, reference to the plane, etc. are provided by the super class'
  /// interface methods.
  ///
  /// \return     Returns the reference to the shape that intersects with the
  ///             plane and causes an intersection highlight on the plane's
  ///             surface.
  ///
  virtual mi::neuraylib::Tag_struct get_intersection_shape() const = 0;
};
}
} // namespace index / nv

#endif // NVIDIA_INDEX_IINTERSECTION_HIGHLIGHT_PICK_RESULT_H
